#include <opencv2/opencv.hpp>
#include <opencv2/highgui.hpp>

namespace RoboPioneers::Lidar::UI
{
    class Widgets {
    protected:
        ///图像来源
        cv::VideoCapture Device;

        /// 相机序号
        int Index=0;

        ///图像尺寸
        int Width;
        int Height;

        ///当前图像
        cv::Mat Picture;

    public:
        Widgets(int width,int height,int id):
            Width(width),Height(height),Index(id)
        {
            Picture=cv::Mat::zeros(cv::Size(Width,Height),CV_8UC3);

            Device.open(id);

            int fourcc = cv::VideoWriter::fourcc('M','J','P','G');//设置摄像头编码方式
            Device.set(cv::CAP_PROP_FRAME_WIDTH, Width);//设置摄像头采集图像分辨率
            Device.set(cv::CAP_PROP_FRAME_HEIGHT, Height);
            Device.set(cv::CAP_PROP_FOURCC,fourcc);
            Device.set(cv::CAP_PROP_FPS,30);
        }

        /**
         * @brief 设置图像缩放后的尺寸
         * @param width
         * @param height
         */
        inline void SetSize(int width,int height)
        {
            Width=width;
            Height=height;
        }

        /**
         * @brief 采集图像并进行缩放
         * @return
         */
        bool GrabPicture();

        inline  cv::Mat GetPicture()
        {
            return Picture;
        }

        /**
         * @brief 以当前照片为底将输入图像在(x,y)处进行叠加显示
         * @param input cv::Mat
         * @param output cv::Mat&
         * @param x 水平方向坐标
         * @param y 垂直方向坐标
         * @return
         */
        bool MixPicture(cv::Mat &output,int x,int y);



    };
}



